As computer technology advances, more systems are implemented as multiprocessor systems including potentially more than one processor or a single processor that includes multiple cores. To take advantage of these advances, software developers can write so-called multi-threaded applications. In these multi-threaded applications, multiple individual threads can be created and used to independently perform units of work to take advantage of the multiprocessor nature of modern computer systems.
While this improves performance and more fully utilizes the resources available in a multiprocessor system, difficulties can arise due to conflicts between the multiple threads. For example, different threads may seek access to the same memory element. Or one thread may seek to use a memory element prior to its initialization by another thread (or after another thread has already deallocated the element). A program may also suffer from potential conflicts in that whether a conflict occurs or not depends on a particular scheduling of the different threads. Thus a conflict can occur according to a certain scheduling of the application, but not others. Because of this uncertainty, available code inspection tools generally cannot determine the presence of potential memory access errors.